The amount of data representing media information, for example, a still image or a video image, can be extremely large. Further, transmitting digital video information over communication networks can consume large amounts of bandwidth. The cost of transmitting data from one location to another is a function of bit rate, e.g. the number of bits transmitted per second. Typically, higher bit transfer rates are associated with increased cost. Higher bit rates can also progressively increase the required storage capacities of memory systems, thereby increasing storage cost. Thus, for a given desired quality level, it can be more cost effective to use fewer bits than more bits to store digital images and videos. It is thus desirable to compress media data for recording, transmitting, or storing.
In a typical compression scheme, achieving higher media quality requires usage of more bits, which can increase the cost of transmission and storage. In other words, while lower bandwidth traffic is desired, so is higher quality media. Regarding compression, the devices encoder, decoder and codec are typically associated with compression. An encoder is a device capable of encoding (e.g., coding) (and sometimes decoding) digital media data. A decoder is a device capable of decoding digital media data. A codec is a device capable of coding and/or decoding digital media data. The term codec is derived from a combination of the terms code and decode, or the terms compress and decompress. A variety of codecs are commercially available. Generally speaking, for example, codec classifications include discrete cosine transfer codecs, fractal codecs, and wavelet codecs. An encoder or codec, by encoding the digital media data, can reduce the number of bits required to transmit signals thereby reducing associated transmission costs.
The encoding process typically involves using motion estimation to facilitate encoding of digital media data. In most cases, consecutive video frames in a sequence of video frames are relatively similar to each other, except for small movements of location(s) of object(s) within a frame from one video frame to the next video frame. Motion estimation techniques take advantage of similarities between consecutive video frames to more efficiently encode a video frame. For instance, an encoder, employing a motion estimation technique, can use a previous video frame as a reference when encoding a current video frame. The encoder generates motion vectors for the current video frame based on its differences from the previous video frame. The encoder identifies differences between the reference video frame and current video frame, and only codes the portions of the current video frame that are different from the reference video frame, without coding the portions of the current video frame that are unchanged from the reference video frame. Selectively coding only the portions that are different makes the encoding and decoding processes more efficient. However, motion estimation is one of the most computing intensive parts of the video encoding process. The better the motion vector, the more the bit rate can be reduced and the more the visual quality can be improved.